{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6bb22af6-44a4-477f-ad4b-8a723cc1448a",
   "metadata": {},
   "source": [
    "# Discrete Quantum Walks"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "122955ef-8431-44dc-a511-603e9f5f417d",
   "metadata": {},
   "source": [
    "\"Quantum Walk\" is an approach for developing and designing quantum algorithms. It can be thought as a quantum analogy to classical random walk. This generic technique underlies many quantum algorithms, in particular, the Grover's search algorithm, can be viewed as a quantum walk.\n",
    "\n",
    "In similar to classical random walks, quantum walks are divided into the discrete case and the continuos one. This notebook focuses on discrete quantum walks, and is organized as follows: First, we give a [one to one](##Classical-Random-Walks-vs.-Quantum-Walks) comparison between classical random walks and quantum walks, by treating a specific example: a walk on a circle. Then, we define a [general quantum model](##How-to-Build-a-general-Quantum-Walk-with-Classiq) for studying quantum walks, and consequently apply it to the [circle case](##Example:-Symmetric-Quantum-Walk-on-a-Circle) and to a a [hypercube graph](##Example:-4D-Hypercube-with-a-Grover-Coin). "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "162bb5a5-5561-4e4c-a6e8-e49509604629",
   "metadata": {},
   "source": [
    "This tutorial demonstrates the following concepts of Classiq:\n",
    "* The resemblance between classical and quantum programming with Classiq.\n",
    "* Classiq's built-in constructs:\n",
    "    * `control`: general controlled-logic\n",
    "    *  `power`: \"parametric power\", specified as execution parameter.\n",
    "    *  `numeric quantum types`: working with signed and unsigned integers.\n",
    "    *  `within_apply` : for compute/uncompute operations $U V U^{\\dagger}$.\n",
    "* Passing a list of `QCallables` (quantum functions).\n",
    "* Parsed execution results, according to quantum variable types.\n",
    "\n",
    "\n",
    "****"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07459d9f-0997-40d6-bc15-ce34daf19a13",
   "metadata": {},
   "source": [
    "## Classical Random Walks vs. Quantum Walks"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e415615-4bc5-4b8e-8090-a73493e8d6bb",
   "metadata": {},
   "source": [
    "We first specify and implement a simple example: a discrete walk on a circle, or more precisely, on a regular polygon having $2^N$ nodes (see Figure 1 below). The idea of random/quantum walk is the following:\n",
    "1. We start at some initial point, e.g., the zeroth node.\n",
    "2. We flip a coin, if we get heads/tails we move one step clockwise/counter-clockwise.\n",
    "3. We repeat steps 1-2 for a given total number of steps $T$."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "928cad21-c2e4-4b4e-822b-8b24324d0463",
   "metadata": {},
   "source": [
    "<center>\n",
    "<img src=\"https://docs.classiq.io/resources/circle_random_walk.png\" style=\"width:30%\">\n",
    "<figcaption align = \"middle\"> Figure 1. A graph for a random walk on a circle. </figcaption>\n",
    "</center>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f554a6f5-ad8c-483e-99c4-e810f482c53a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:12.573415Z",
     "iopub.status.busy": "2024-05-07T13:29:12.572905Z",
     "iopub.status.idle": "2024-05-07T13:29:15.354393Z",
     "shell.execute_reply": "2024-05-07T13:29:15.353685Z"
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "from classiq import *"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ad402658-6f37-4013-b345-61a608560025",
   "metadata": {},
   "source": [
    "Let us code a classical random walk and a discrete quantum walk side by side:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7fa60d50-5633-4458-9a9a-c908cde93a52",
   "metadata": {},
   "source": [
    "First, we define a function to flip a coin:\n",
    "* Classical: the coin is either 0 or 1, to flip a coin we simply draw a random number from the set $\\{0,1\\}$.\n",
    "* Quantum: the coin is represented by a qubit, a \"flip\" is defined by some unitary operation on it. We choose the Hadamard gate, which sends the $|0\\rangle$ state into an equal superposition of $|0\\rangle$ and $|1\\rangle$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cb045538-fc52-4cb2-9282-523136887f46",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:15.357477Z",
     "iopub.status.busy": "2024-05-07T13:29:15.356979Z",
     "iopub.status.idle": "2024-05-07T13:29:15.360727Z",
     "shell.execute_reply": "2024-05-07T13:29:15.360085Z"
    }
   },
   "outputs": [],
   "source": [
    "def classical_coin_flip(coin):\n",
    "    return np.random.randint(2)\n",
    "\n",
    "\n",
    "@qfunc\n",
    "def quantum_coin_flip(coin: QBit):\n",
    "    H(coin)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d10a317a-0267-4b51-b230-3d3cd393d3fd",
   "metadata": {},
   "source": [
    "Next, we define a function for moving clockwise and counterclockwise. This operation is simply a modular addition by $\\pm 1$.\n",
    "* Classical: the position is an integer in $[-2^{N-1}, 2^{N-1}-1]$, we use basic arithmetic operations.\n",
    "* Quantum: the position is an $N$-qubits state. We can easily build an inplace modular addition by 1 ourselves (see explanation at [the end of this notebook](#Technical-Notes)). Note that since quantum operations are reversible, we can define a counterclockwise step as the inverse of the clockwise step."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7d849d3d-2e03-4824-ac40-ac3364f2e1b7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:15.363081Z",
     "iopub.status.busy": "2024-05-07T13:29:15.362718Z",
     "iopub.status.idle": "2024-05-07T13:29:15.369725Z",
     "shell.execute_reply": "2024-05-07T13:29:15.368352Z"
    }
   },
   "outputs": [],
   "source": [
    "from classiq.qmod.symbolic import pi\n",
    "\n",
    "\n",
    "# classical\n",
    "def classical_step_clockwise(x, circle_size):\n",
    "    return (x + 1) % circle_size\n",
    "\n",
    "\n",
    "def classical_step_counterclockwise(x, circle_size):\n",
    "    return (x - 1) % circle_size\n",
    "\n",
    "\n",
    "# quantum\n",
    "@qfunc\n",
    "def quantum_step_clockwise(x: QArray):\n",
    "\n",
    "    within_apply(\n",
    "        lambda: qft(x),\n",
    "        lambda: repeat(x.len, lambda i: PHASE(2 * pi * 2 ** (i) / (2**x.len), x[i])),\n",
    "    )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f102eaf-80e8-45d3-8b55-e09ede9604ec",
   "metadata": {},
   "source": [
    "Finally, we construct a function for the full walk, iterating over flipping a coin and a single walking step based on the coin's state. Note the difference between the classical and quantum functions' declarations, for the quantum part we do not need to pass the circle size, as it is given by the size of the position state $x$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "f78713da-6344-423c-a007-41638a3bd1a7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:15.374939Z",
     "iopub.status.busy": "2024-05-07T13:29:15.374073Z",
     "iopub.status.idle": "2024-05-07T13:29:15.382877Z",
     "shell.execute_reply": "2024-05-07T13:29:15.382022Z"
    }
   },
   "outputs": [],
   "source": [
    "# classical\n",
    "\n",
    "\n",
    "def random_walk_circle(\n",
    "    time,  # total time\n",
    "    x,  # position\n",
    "    circle_size,  # the size of the circle\n",
    "):\n",
    "    coin = 0\n",
    "    for step in range(time):\n",
    "        coin = classical_coin_flip(coin)\n",
    "        if coin == 0:\n",
    "            x = classical_step_clockwise(x, CIRCLE_SIZE)\n",
    "        if coin == 1:\n",
    "            x = classical_step_counterclockwise(x, CIRCLE_SIZE)\n",
    "    return x\n",
    "\n",
    "\n",
    "# quantum\n",
    "@qfunc\n",
    "def discrete_quantum_walk_circle(\n",
    "    time: CInt,  # total time\n",
    "    x: QArray[QBit],  # position\n",
    "):\n",
    "    coin = QNum(\"coin\")\n",
    "    allocate(1, coin)\n",
    "    power(\n",
    "        time,\n",
    "        lambda: (\n",
    "            quantum_coin_flip(coin),\n",
    "            control(coin == 0, lambda: quantum_step_clockwise(x)),\n",
    "            control(coin == 1, lambda: invert(lambda: quantum_step_clockwise(x))),\n",
    "        ),\n",
    "    )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea9266b8-60a0-4f93-bc6b-942cd6d85cb7",
   "metadata": {},
   "source": [
    "Let us define and run a specific example. We take a circle of size $2^7$, a total time of 50 steps, and 10000 samples. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "08292dda-f399-4532-923d-256de55b82ab",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:15.388391Z",
     "iopub.status.busy": "2024-05-07T13:29:15.387243Z",
     "iopub.status.idle": "2024-05-07T13:29:15.393480Z",
     "shell.execute_reply": "2024-05-07T13:29:15.392864Z"
    }
   },
   "outputs": [],
   "source": [
    "CIRCLE_SIZE = 2**7\n",
    "TOTAL_TIME = 50\n",
    "NUM_SAMPLES = 10000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "2bf9fd18-3508-4e9b-995b-cb18025892f9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:15.397631Z",
     "iopub.status.busy": "2024-05-07T13:29:15.396528Z",
     "iopub.status.idle": "2024-05-07T13:29:30.800511Z",
     "shell.execute_reply": "2024-05-07T13:29:30.799858Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Opening: https://platform.classiq.io/circuit/cfd073b1-0ec3-4490-b8ee-0837975e4ea0?version=0.41.0.dev39%2B79c8fd0855\n"
     ]
    }
   ],
   "source": [
    "from classiq.execution import ExecutionPreferences\n",
    "from classiq.qmod.symbolic import floor, log\n",
    "\n",
    "# classical\n",
    "final_pos = np.zeros(CIRCLE_SIZE)\n",
    "for sample in range(NUM_SAMPLES):\n",
    "    x = random_walk_circle(time=TOTAL_TIME, x=0, circle_size=CIRCLE_SIZE)\n",
    "    final_pos[x] += 1\n",
    "\n",
    "\n",
    "# quantum\n",
    "@qfunc\n",
    "def main(t: CInt, x: Output[QNum]):\n",
    "\n",
    "    allocate_num(floor(log(CIRCLE_SIZE, 2)), True, 0, x)\n",
    "    discrete_quantum_walk_circle(t, x)\n",
    "\n",
    "\n",
    "@cfunc\n",
    "def cmain():\n",
    "    save({\"run\": sample({\"t\": 50})})\n",
    "\n",
    "\n",
    "qmod = create_model(\n",
    "    main,\n",
    "    classical_execution_function=cmain,\n",
    "    execution_preferences=ExecutionPreferences(num_shots=NUM_SAMPLES),\n",
    ")\n",
    "\n",
    "write_qmod(qmod, \"quantum_walk_circle\")\n",
    "qprog = synthesize(qmod)\n",
    "show(qprog)\n",
    "results = execute(qprog).result()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86989d71-6962-4062-9c8e-eeac0dc88102",
   "metadata": {},
   "source": [
    "<center>\n",
    "<img src=\"https://docs.classiq.io/resources/quantum_walk_circle_circuit.png\" style=\"width:100%\">\n",
    "<figcaption align = \"middle\"> Figure 2. The circuit for a quantum walk on a circle with $2^7$ nodes. The last three blocks are repeated `t` times. </figcaption>\n",
    "</center>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4237a7e6-9dd1-4580-b3cf-22282e341909",
   "metadata": {},
   "source": [
    "We can plot the probabilities of ending at each position along the circle. In both cases, classical and quantum, we consider the probability of the final position after time $T=50$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b530ce16-8ca1-4a0d-9ab4-3276cc752460",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:30.806410Z",
     "iopub.status.busy": "2024-05-07T13:29:30.804628Z",
     "iopub.status.idle": "2024-05-07T13:29:31.107836Z",
     "shell.execute_reply": "2024-05-07T13:29:31.107223Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'probability')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# classical\n",
    "prob_classical = final_pos / NUM_SAMPLES\n",
    "grid = (np.linspace(0, CIRCLE_SIZE - 1, CIRCLE_SIZE)).astype(int)\n",
    "flipped_grid = np.append(\n",
    "    grid[CIRCLE_SIZE // 2 : CIRCLE_SIZE] - CIRCLE_SIZE, grid[0 : CIRCLE_SIZE // 2]\n",
    ")\n",
    "flipped_prob_classical = np.append(\n",
    "    prob_classical[CIRCLE_SIZE // 2 : CIRCLE_SIZE], prob_classical[0 : CIRCLE_SIZE // 2]\n",
    ")\n",
    "\n",
    "# quantum\n",
    "quantum_probs = {\n",
    "    sample.state[\"x\"]: sample.shots / NUM_SAMPLES\n",
    "    for sample in results[0].value.parsed_counts\n",
    "}\n",
    "sorted_quantum_probs = dict(sorted(quantum_probs.items()))\n",
    "\n",
    "\n",
    "plt.plot(flipped_grid, flipped_prob_classical, \".-\")\n",
    "plt.plot(sorted_quantum_probs.keys(), sorted_quantum_probs.values(), \".-\")\n",
    "plt.xlabel(\"position\", fontsize=16)\n",
    "plt.ylabel(\"probability\", fontsize=16)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "922b31e2-d1c4-4d7d-afd1-c633b5981441",
   "metadata": {},
   "source": [
    "We can see a clear difference between the two distributions. The classical distribution is symmetric around the zero position, whereas the quantum example is asymmetric with a peak far from 0. This is a small example of the different behaviors of classical random walks and quantum walks. More details and examples can be found in Ref. [[1](#review)]."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0115edd-4b37-4482-8a30-c80bc0e50bac",
   "metadata": {},
   "source": [
    "## How to Build a General Quantum Walk with Classiq"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "10f78850-0b2e-40ae-bd19-9558f6da238c",
   "metadata": {},
   "source": [
    "We define a quantum function for a discrete quantum walk. The arguments of the function are:\n",
    "* `time`: an integer for the number of walking steps.\n",
    "* `coin_flip_qfunc`: the quantum function for \"flipping\" the coin.\n",
    "*  `walks_qfuncs`: a list of quantum functions for all possible transitions at a given point.\n",
    "*  `coin_state`: the quantum state of the coin."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "72be5d00-bb53-4b71-8ba0-5a6c6cd20a1b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:31.112435Z",
     "iopub.status.busy": "2024-05-07T13:29:31.111381Z",
     "iopub.status.idle": "2024-05-07T13:29:31.118010Z",
     "shell.execute_reply": "2024-05-07T13:29:31.117322Z"
    }
   },
   "outputs": [],
   "source": [
    "from classiq.qmod.symbolic import pi\n",
    "\n",
    "\n",
    "@qfunc\n",
    "def discrete_quantum_walk(\n",
    "    time: CInt,\n",
    "    coin_flip_qfunc: QCallable[QNum],\n",
    "    walks_qfuncs: QCallableList,\n",
    "    coin_state: QNum,\n",
    "):\n",
    "\n",
    "    power(\n",
    "        time,\n",
    "        lambda: (\n",
    "            coin_flip_qfunc(coin_state),\n",
    "            repeat(\n",
    "                walks_qfuncs.len,\n",
    "                lambda i: control(coin_state == i, lambda: walks_qfuncs[i]()),\n",
    "            ),\n",
    "        ),\n",
    "    )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ecebf5ce-99de-44c5-93c8-adf4a09cd264",
   "metadata": {},
   "source": [
    "## Example: Symmetric Quantum Walk on a Circle"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5cc94bcc-8d84-407d-9e76-6137899327df",
   "metadata": {},
   "source": [
    "As a first example, we can consider the circle geometry from above, implemented with our generic definition. However, as opposed to the implementation above we take a different initial condition for the coin, $\\frac{1}{\\sqrt{2}}(|0\\rangle +i |1\\rangle)$ instead of $|0\\rangle$. This state is a balanced initial condition for the coin (see Ref. [[1](#review)]) and can be prepared by applying an H gate followed by an S gate."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "5dbc34f3-038f-4a19-a16a-33b6a0dfe02f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:31.122713Z",
     "iopub.status.busy": "2024-05-07T13:29:31.121542Z",
     "iopub.status.idle": "2024-05-07T13:29:31.154936Z",
     "shell.execute_reply": "2024-05-07T13:29:31.154196Z"
    }
   },
   "outputs": [],
   "source": [
    "from classiq.execution import ExecutionPreferences\n",
    "\n",
    "CIRCLE_SIZE = 2**7\n",
    "NUM_SHOTS = 1e4\n",
    "\n",
    "\n",
    "@qfunc\n",
    "def main(t: CInt, x: Output[QNum]):\n",
    "\n",
    "    coin = QBit(\"coin\")\n",
    "    allocate_num(floor(log(CIRCLE_SIZE, 2)), True, 0, x)\n",
    "    allocate(1, coin)\n",
    "    H(coin)\n",
    "    S(coin)\n",
    "    discrete_quantum_walk(\n",
    "        t,\n",
    "        lambda coin: H(coin),\n",
    "        [\n",
    "            lambda: quantum_step_clockwise(x),\n",
    "            lambda: invert(lambda: quantum_step_clockwise(x)),\n",
    "        ],\n",
    "        coin,\n",
    "    )\n",
    "\n",
    "\n",
    "@cfunc\n",
    "def cmain():\n",
    "    save({\"run1\": sample({\"t\": 50})})\n",
    "\n",
    "\n",
    "qmod = create_model(\n",
    "    main,\n",
    "    classical_execution_function=cmain,\n",
    "    execution_preferences=ExecutionPreferences(num_shots=NUM_SHOTS),\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7334aee1-b637-419d-88e3-130b66c1140c",
   "metadata": {},
   "source": [
    "Now that our model is defined we can synthesize, execute and plot the outcome probability:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "4023a118-1e66-4f26-9d75-f97f4d145d4c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:31.160478Z",
     "iopub.status.busy": "2024-05-07T13:29:31.159253Z",
     "iopub.status.idle": "2024-05-07T13:29:43.583540Z",
     "shell.execute_reply": "2024-05-07T13:29:43.582915Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Opening: https://platform.classiq.io/circuit/a430e208-f365-47e7-a7fc-0b0b99fc4743?version=0.41.0.dev39%2B79c8fd0855\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'probability')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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QUEBvvrqK/n7kXxt7ixatAiCIODBBx+Ubwv3NTIwUoi//vWvyMnJaXF7bW0trr76anTv3h27d+/GM888g8ceewyvv/56GM7SN2PGjMF//vMfHDlyBB9//DF++eUX/OEPf5C/H8nXePjwYVitVrz22mv48ccf8fzzz2PZsmWYN2+efEwkX5/EZDJh8uTJuPfee91+32KxYMKECTCZTNiyZQveeecdvP3223j00UdDfKa+WblyJWbNmoUFCxZgz549GDBgAMaNG4fKyspwn5rXDAYDBgwYgFdeecXt9xcvXowXX3wRy5Ytw/bt25GUlIRx48ahsbExxGfqm02bNuG+++7Dtm3bsH79ejQ1NeHqq6+GwWCQj/nzn/+Mzz77DKtWrcKmTZtw+vRpTJo0KYxn7bmuXbti0aJF2L17N3bt2oUrrrgC119/PX788UcAkX1tze3cuROvvfYaLr74Ypfbw36NIoXdl19+Kfbu3Vv88ccfRQDi3r175e/985//FDt06CAajUb5tocffljs1atXGM40MD799FNREATRZDKJohh917h48WIxPz9f/jqaru+tt94S09LSWtz+5ZdfiiqVSiwvL5dve/XVV8XU1FSX61aqYcOGiffdd5/8tcViEXNycsSFCxeG8az8B0D85JNP5K+tVquYnZ0tPvPMM/Jt586dE7Varfjvf/87DGfov8rKShGAuGnTJlEUbdcTHx8vrlq1Sj7m0KFDIgBx69at4TpNv3To0EF84403oura9Hq92LNnT3H9+vXiqFGjxAceeEAURWX892PGKMwqKiowY8YMvPfee0hMTGzx/a1bt+Lyyy+HRqORbxs3bhyOHDmCX3/9NZSnGhBnz57FBx98gBEjRiA+Ph5A9F1jTU0NOnbsKH8dbdfnztatW9G/f39kZWXJt40bNw61tbXyJ12lMplM2L17N8aOHSvfplKpMHbsWGzdujWMZxZ4RUVFKC8vd7nWtLQ0DB8+PGKvtaamBgDk59zu3bvR1NTkco29e/dGt27dIu4aLRYLVqxYAYPBgIKCgqi6tvvuuw8TJkxwuRZAGf/9GBiFkSiKuP3223HPPfdgyJAhbo8pLy93ebMBIH9dXl4e9HMMlIcffhhJSUno1KkTiouL8emnn8rfi5ZrBICff/4ZL730Eu6++275tmi6vtZE8jVWV1fDYrG4PX+ln7u3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8ccf4/XXX8cdd9zh9r7r1q3Dc889h/PPPx9XXXUVysrK8P333+Mvf/kLSkpKsHTpUo/OgYh8IBIRBRkAEYCYkJAgFhYWunxv8eLFIgAxLS1NrKiocPne8OHDRQDiddddJ9bV1cm3V1ZWioMGDRIBiLfccovLffLz80UA4nfffdfiPCoqKsQ9e/a43LZgwQIRgLhgwQKX2zds2CACEEeNGtXqdbV236+++koEIOp0OvHrr792+d4bb7whAhDj4+PFgwcPunxv1KhR8u9q2bJlLt8rLCwUBUEQ1Wq1WFJS0uo5EZF/uJRGRCFz991344orrnC5bfbs2RgyZAhqamrwxhtvyLd///332L59OxITE/H6668jKSlJ/l7nzp3x+uuvAwBWrFiBU6dOyd+rqKhAWloaLr300haPn5mZiUsuuSTQl9XCs88+CwD405/+hKuuusrle3feeSd++9vfoqmpCS+88ILb+0+aNAl33323y21XXHEFxo0bB4vFgg0bNgTnxImINUZEFDrTpk1ze/vUqVMBwKX7S/r/48ePR1ZWVov7DB48GAMGDIDVasWmTZvk24cNG4aamhpMnToVu3fvhtVqDdwFeMBsNuOHH34AANx+++1uj7nzzjsBoNUA53e/+53b2/v06QMAKC0t9fMsiag1DIyIKGTy8/PbvN058yO9+bd2HwA4//zzXY4FgH/+858477zz8N5772HIkCFIT0/HlVdeiSeffBLFxcV+X0N7zpw5g8bGRgCtn7u783bWrVs3t7enpqYCgPzziSjwGBgRkWKIAei46tOnD44cOYIvvvgCDz30EPr164fvvvsOjzzyCHr27In3338/AGcaXCoVX5qJwoXPPiIKmaKiIre3nzhxAgDQtWtX+bbc3FwAts601kjfk46VxMXF4dprr8Wzzz6LLVu2oLq6GgsWLIDJZMLdd98Ng8Hgz2W0qVOnTtBqtW2ee2vnTUThx8CIiELmvffea/N25+03pP+/du1aVFRUtLjP3r17sW/fPqhUqnbb71NTU/HYY48hPT0d9fX1OHr0aLvnqtFoANhqhrwRFxcnF36//fbbbo9Zvnw5AMizkohIORgYEVHIvPrqqy2213j++eexY8cOpKSkyEXJAHDppZdi+PDhaGhowN133436+nr5e9XV1XLX1k033YS8vDwAQH19PZ577jlUVVW1eOzvvvsO586dg1qtdslMtUY65tixY2hqavLqOh966CH5egsLC12+9/bbb+O///0v4uPj8cADD3j1c4ko+DjgkYhCRmrXv+yyy5Cbm4uDBw/iwIEDUKvVWL58ObKzs12O//DDD3HFFVfg008/RX5+Pi6//HJ5wGNtbS0GDRqEl19+WT7eZDLhoYcewuzZs9G/f3/07NkT8fHxOHHihDxd+29/+xs6d+7c7rl269YNQ4YMwa5du9C/f38MGTIEOp0OGRkZWLRoUZv3veaaa/DII4/giSeewFVXXYWRI0eiW7duOHz4MPbs2QO1Wo1ly5bhoosu8uG3SETBxMCIiELm+eefR69evfDaa69h586diI+Px/jx4zF//nyMGDGixfHnnXce9uzZg2effRZr1qzB559/DpVKhV69emHKlCm4//77kZCQIB+fnJyMZcuWYdOmTdi7dy/Wr18Pk8mEnJwcTJo0CX/6059azFFqy8cff4y5c+diw4YNWLlyJcxmM7p3795uYAQAjz/+OEaOHImXXnoJ27dvx7Zt25CRkYHJkyfjL3/5C4YNG+bxeRBR6AhiINpAiIjaIO2TxpcbIlI61hgRERER2TEwIiIiIrJjYERERERkx+JrIgo61hYRUaRgxoiIiIjIjoERERERkR0DIyIiIiI7BkZEREREdgyMiIiIiOwYGBERERHZMTAiIiIismNgRERERGT3/wFAGvaz6sDbvQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "qprog = synthesize(qmod)\n",
    "write_qmod(qmod, \"quantum_walk_circle_balanced_coin\")\n",
    "show(qprog)\n",
    "results = execute(qprog).result()\n",
    "quantum_probs = {\n",
    "    sample.state[\"x\"]: sample.shots / NUM_SAMPLES\n",
    "    for sample in results[0].value.parsed_counts\n",
    "}\n",
    "sorted_quantum_probs = dict(sorted(quantum_probs.items()))\n",
    "\n",
    "plt.plot(sorted_quantum_probs.keys(), sorted_quantum_probs.values(), \".-\")\n",
    "plt.xlabel(\"position\", fontsize=16)\n",
    "plt.ylabel(\"probability\", fontsize=16)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "233124ab-fe1e-413c-ac05-ac72cc723e19",
   "metadata": {},
   "source": [
    "We can see that now the distribution is symmetric. Clearly, the distribution of a quantum walk on a circle depends on the initial condition for the coin. This is another example of the peculiar behavior of quantum walks, with respect to classical random walks."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de3cd5da-0807-4aac-a675-c995aefe2018",
   "metadata": {},
   "source": [
    "## Example: 4D Hypercube with a Grover Coin"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ab34bdd9-c5aa-4744-aa41-4831bf88117d",
   "metadata": {},
   "source": [
    "Next, we consider an hypercube graph (see Figure 3). The quantum walk on a hypercube shows a completely different behavior compared to classical counterpart. One striking difference refers to the hitting time: the time it takes to reach node $v$ starting from an initial node $u$. In particular, an interesting question is the hitting time between one corner of the hypercube \"000..0\" to the opposite one \"111...1\". In Ref. [[2](#hypercube)]) it was shown that the hitting time for the hypercube in quantum walks is *exponentially faster* than the analog quantity in classical random walks. The rigour definition of the \"hitting time\" in the quantum case is nontrivial, and different definitions are relevant. In this notebook we do not use the exact definition, but simply demonstrate a specific result, highlighting the result of Ref. [[2](#hypercube)]. \n",
    "\n",
    "We define $P_{\\rm corner}(T)$ as the probability of measuring the walker at the opposite corner $|2^{N}-1\\rangle$ after $T$ steps, starting at position $|0\\rangle$ at time 0. We examine this quantity for the quantum and the classical case."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "522a8b81-a0f2-4a23-a012-6ad336b8ad07",
   "metadata": {},
   "source": [
    "<center>\n",
    "<img src=\"https://docs.classiq.io/resources/hypercube_random_walk.png\" style=\"width:50%\">\n",
    "<figcaption align = \"middle\"> Figure 3. A graph for a random walk on a 3D hypercube. </figcaption>\n",
    "</center>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7dc4fde2-43ee-4249-84ee-909c3b694ce0",
   "metadata": {},
   "source": [
    "First, we define a model for quantum walk on a hypercube. Two nodes in the hypercube are connected to each other iff their Hamming distance is 1. Thus, a step along a hypercube is given by moving \"1 Hamming distance away\". For a $d$-dimentional hypercube, at each node there are $d$ possible directions to move, each of them is given by applying a bit flip on one of the bits. In the quantum case, this is obtained by applying an X gate on on of the $N$ qubit.\n",
    "\n",
    "Concerning the coin operator we take the so-called \"Grover diffuser\" function. This choice refers to a symmetric quantum walk [[1](#review)]. The Grover diffuser operator is a reflection around a given state $|\\psi\\rangle$:\n",
    "$$\n",
    "G = I-2 |\\psi\\rangle\\langle\\psi|,\n",
    "$$\n",
    "where I is the identity matrix. In the $N$-dimensional hypercube each node is connected to $N$ nodes, thus, the coin state should include $N$ different states. Therefore, the coin is represented by a quantum variable of size $\\lceil \\log_2(N)\\rceil$, and the Grover diffuser is defined with:\n",
    "$$\n",
    "|\\psi\\rangle = \\frac{1}{\\sqrt{N}}\\sum^{N-1}_{i=0} |i\\rangle.\n",
    "$$\n",
    "\n",
    "We now build our model, using the `grover_diffuser` function from Classiq's open library."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b9f513c8-d44e-48cd-ad52-29ec7d7c16e9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:43.588063Z",
     "iopub.status.busy": "2024-05-07T13:29:43.586986Z",
     "iopub.status.idle": "2024-05-07T13:29:43.591745Z",
     "shell.execute_reply": "2024-05-07T13:29:43.591185Z"
    }
   },
   "outputs": [],
   "source": [
    "@qfunc\n",
    "def moving_one_hamming_dist(pos: CInt, x: QArray[QBit]):\n",
    "    X(x[pos])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "5e4e0688-76d4-41fe-ba75-948f548094b4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:43.595954Z",
     "iopub.status.busy": "2024-05-07T13:29:43.594931Z",
     "iopub.status.idle": "2024-05-07T13:29:43.639507Z",
     "shell.execute_reply": "2024-05-07T13:29:43.638755Z"
    }
   },
   "outputs": [],
   "source": [
    "from classiq.execution import ExecutionPreferences\n",
    "from classiq.qmod.symbolic import ceiling\n",
    "\n",
    "SPACE_SIZE = 4\n",
    "NUM_SHOTS = 1e4\n",
    "\n",
    "# in the case the space size is not 2^r we padd the coin state with zeros\n",
    "reduced_coin_state = [1 / SPACE_SIZE] * SPACE_SIZE + [0] * int(\n",
    "    2 ** np.ceil(np.log2(SPACE_SIZE)) - SPACE_SIZE\n",
    ")\n",
    "\n",
    "\n",
    "@qfunc\n",
    "def main(\n",
    "    t: CInt,\n",
    "    x: Output[QArray[QBit]],\n",
    "):\n",
    "\n",
    "    # start at zero state location\n",
    "    allocate(SPACE_SIZE, x)\n",
    "\n",
    "    # start with equal superpositon for the relevant states.\n",
    "    coin = QArray(\"coin\")\n",
    "    prepare_state(reduced_coin_state, 0.0, coin)\n",
    "    discrete_quantum_walk(\n",
    "        t,\n",
    "        lambda coin: grover_diffuser(\n",
    "            lambda coin: inplace_prepare_state(reduced_coin_state, 0.0, coin), coin\n",
    "        ),\n",
    "        [\n",
    "            lambda: moving_one_hamming_dist(0, x),\n",
    "            lambda: moving_one_hamming_dist(1, x),\n",
    "            lambda: moving_one_hamming_dist(2, x),\n",
    "            lambda: moving_one_hamming_dist(3, x),\n",
    "        ],\n",
    "        coin,\n",
    "    )\n",
    "\n",
    "\n",
    "@cfunc\n",
    "def cmain():\n",
    "    save({\"run\": sample({\"t\": 4})})\n",
    "\n",
    "\n",
    "qmod = create_model(\n",
    "    main,\n",
    "    classical_execution_function=cmain,\n",
    "    execution_preferences=ExecutionPreferences(num_shots=NUM_SHOTS),\n",
    "    constraints=Constraints(optimization_parameter=\"width\"),\n",
    ")\n",
    "\n",
    "write_qmod(qmod, \"quantum_walk_hypercube\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "8683e9d7-199f-427a-a122-cdc93db05d46",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:43.644412Z",
     "iopub.status.busy": "2024-05-07T13:29:43.643259Z",
     "iopub.status.idle": "2024-05-07T13:29:45.973730Z",
     "shell.execute_reply": "2024-05-07T13:29:45.972963Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Opening: https://platform.classiq.io/circuit/c674bb1e-ca9f-4d56-b2a1-e74797d25ec2?version=0.41.0.dev39%2B79c8fd0855\n"
     ]
    }
   ],
   "source": [
    "qprog = synthesize(qmod)\n",
    "show(qprog)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16b8ae22-8bae-43a5-a24d-e202a2bd7335",
   "metadata": {},
   "source": [
    "<center>\n",
    "<img src=\"https://docs.classiq.io/resources/quantum_walk_hypercube_circuit.png\" style=\"width:100%\">\n",
    "<figcaption align = \"middle\"> Figure 4. The circuit for a quantum walk on a 4D cube with a Grover coin. The last two blocks are repeated `t` times. </figcaption>\n",
    "</center>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "eccd5bb7-4ddb-49fb-80ef-963ccd0f6f07",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:45.977037Z",
     "iopub.status.busy": "2024-05-07T13:29:45.976657Z",
     "iopub.status.idle": "2024-05-07T13:29:47.426254Z",
     "shell.execute_reply": "2024-05-07T13:29:47.425529Z"
    }
   },
   "outputs": [],
   "source": [
    "results = execute(qprog).result()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "8b571d9a-23c6-4d92-b95f-3b958f2d6c5f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:47.430397Z",
     "iopub.status.busy": "2024-05-07T13:29:47.429954Z",
     "iopub.status.idle": "2024-05-07T13:29:47.453476Z",
     "shell.execute_reply": "2024-05-07T13:29:47.447984Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The probability to reach the opposite corner: 0.56\n"
     ]
    }
   ],
   "source": [
    "print(\n",
    "    \"The probability to reach the opposite corner:\",\n",
    "    results[0].value.counts.get(\"1\" * SPACE_SIZE, 0) / NUM_SHOTS,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3cca3d17-4ec3-4cba-b770-13b38e58faa4",
   "metadata": {},
   "source": [
    "We found that at $T=4$ the probability to measure the walker at the opposite corner is larger than $1/2$. We can check an analogous question in the classical random walk, where the distribution is taken over an ensemble of independent experiments):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "fc12d7df-8613-480f-93e5-6304496c74aa",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T13:29:47.459592Z",
     "iopub.status.busy": "2024-05-07T13:29:47.459325Z",
     "iopub.status.idle": "2024-05-07T13:29:47.546036Z",
     "shell.execute_reply": "2024-05-07T13:29:47.545181Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The probability to reach the opposite corner in the classical case: 0.0658\n"
     ]
    }
   ],
   "source": [
    "initial_point = 0\n",
    "final_point = dict()\n",
    "\n",
    "for sample in range(NUM_SAMPLES):\n",
    "    coin_state = np.random.randint(SPACE_SIZE)\n",
    "    for k in range(SPACE_SIZE):\n",
    "        if coin_state == k:\n",
    "            temp_point = initial_point ^ 2**k\n",
    "            initial_point = temp_point\n",
    "    final_point[initial_point] = final_point.get(initial_point, 0) + 1\n",
    "\n",
    "print(\n",
    "    \"The probability to reach the opposite corner in the classical case:\",\n",
    "    final_point.get(2**SPACE_SIZE - 1, 0) / NUM_SAMPLES,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b654ef61",
   "metadata": {},
   "source": [
    "For the classical analogous case, the probability is much lower. This is a manifestation of the fact that the hitting time in a hypercube is exponentially shorter in quantum walks, in comparison to classical random walks."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "916c1dd1-3f08-417e-a7f7-adbaa33b60d4",
   "metadata": {},
   "source": [
    "## Technical Notes\n",
    "\n",
    "### QFT modular adder\n",
    "\n",
    "Below we explain the `quantum_step_clockwise` function defined for the quantum walk on a circle. The unitary matrix that represents walking on a circle operates as follows:\n",
    "$$\n",
    "U_{+}|i\\rangle =\n",
    "\\left\\{\n",
    "\\begin{array}{l l}\n",
    " |i+1\\rangle & {\\text{if  } } i\\neq 2^{N-1}\\\\\n",
    " |0\\rangle & {\\text{if  } } i = 2^{N-1}\n",
    "\\end{array}\n",
    "\\right.\n",
    "$$\n",
    "In a matrix form this is simply the matrix\n",
    "$$\n",
    "U_+ = \n",
    "\\begin{pmatrix}\n",
    "\t 0 & 1 & 0 & \\cdots & 0 & 0 \\\\\n",
    "\t 0 & 0 & 1 & 0 & \\cdots & 0 \\\\\n",
    "\t 0 & \\ddots &\\ddots & \\ddots & \\cdots & 0 \\\\\n",
    "\t \\vdots & \\ddots & \\ddots & \\ddots& \\ddots & \\vdots \\\\\n",
    "\t 0 & \\ddots & \\ddots & 0& 0 & 1\\\\\n",
    "\t 1 & 0 & 0 & \\cdots & 0 & 0\n",
    "\\end{pmatrix}.\n",
    "$$\n",
    "In Fourier space this matrix is diagonal, namely, the Fourier matrix $\\mathcal{FT} $ diagonalizes it. Moreover, the diagonal entries forms a goemetric series:\n",
    "$$\n",
    "U_+  = \\mathcal{FT} \\cdot \\begin{pmatrix}\n",
    "\t\\alpha^0 &  0 & \\cdots& \\cdots  & 0 \\\\\n",
    "\t 0 & \\alpha^1 & 0 &  \\cdots & 0 \\\\\n",
    "\t 0 & 0 &\\ddots & \\cdots & 0 \\\\\n",
    "\t 0 & 0 &\\cdots & \\alpha^{2^N-2} & 0 \\\\\n",
    "\t 0 & \\cdots & 0 & \\cdots & \\alpha^{2^N-1}\n",
    "\\end{pmatrix} \\cdot \\mathcal{FT}^{\\dagger},\n",
    "$$\n",
    "with $\\alpha=e^{2\\pi i /2^N }$. We can implement both the $\\mathcal{FT}$ matrix and the diagonal matrix efficiently on a quantum computer, the former by a QFT and the latter by applying a series of $N$ RZ rotations."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88b24611-5d16-4fa0-a014-d192459198d3",
   "metadata": {},
   "source": [
    "<a id='review'>[1]</a>: [Kempe, J. \"Quantum random walks: an introductory overview.\" Contemporary Physics 44, 307 (2003)](https://arxiv.org/abs/quant-ph/0303081).\n",
    "\n",
    "<a id='hypercube'>[2]</a>: [Kempe, J. \"Discrete quantum walks hit exponentially faster.\" Probability theory and related fields 133, 215 (2005)](https://arxiv.org/abs/quant-ph/0205083)."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
